C/C++中关于int *p[n]、int(*p)[n]、int*p()和int(*p)()巨详细实例解释 | 您所在的位置:网站首页 › new int *[n] › C/C++中关于int *p[n]、int(*p)[n]、int*p()和int(*p)()巨详细实例解释 |
关于int *p[n]、int(p)[n]、intp()和int(*p)()详细实例解释
指针是C/C++语言中最精彩部分,话不多说,下边对这四种形式进行寻根问底,进行剖析。 int *p[n];int(*p)[n];int*p();int(*p)(); 看似好像乱的不像话,但是它理解起来并没有那么难懂,注意注意,下边是正文部分。提示:要区分这四个的区别,可以从运算符优先级的层面来看差异,C语言中,[]和()的优先级比 * 的优先级高。 一、int *p[n]根据优先级,int *p[n]等价于int *(p[n]),那p[n]顾名思义就只是一个数组而已,前边加一个 * ,就变成了数组指针了,即这个一维数组里边n个变量都是指针变量。 这样一来的便捷之处在于可以一次定义很多指针,如果需要很多同类型的指针的话,这么做很省事,事实上确实如此: 测试代码001 #include int main() { int* p[3]; //定义一个指针数组 int* q1, * q2, * q3; //定义三个指针变量 int a = 10, b = 20, c = 30; //定义整型变量,便于后边检验 p[0] = &a; p[1] = &b; p[2] = &c; q1 = &a; q2 = &b; q3 = &c; printf("%d\t%d\t%d\n", *p[0], *p[1], *p[2]); printf("%d\t%d\t%d\n", *q1, *q2, *q3); return 0; }这里是输出结果: 到这里,*p不能简单地只看做是 *p=a(假定a是一个整型变量),应该比较着来看: 运行结果是这样的: 如果还是不太清楚,我们继续看一段实例代码: 测试代码003 #include int main() { int a[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 }; int(*p)[4]; //定义p为指针变量,指向含有4个int型元素的一维数组 int i, j; p = a; //p指向二维数组a的行a[0] for (i = 0; i int s; s = *p + *q; return &s; //返回s的地址 }运行结果当然也就很明了了,屏幕上蹦出一个9,就结束了,当然,对于这个int*p()讲到这里,最重要的是要记得,这个是 对于函数的概念这里就不在多说了,值得一提的是,每个函数都要占用一段连续的存储空间,而函数名就是这段内存区域的首地址,讲到这里,我们其实就可以想,如果把这个首地址赋给一个指针变量,那就可以调用指针来实现函数的功能了,没错,事实就是这样,而这样的函数叫做函数指针(把函数当成一个指针来看),其形式就是int(*p)(), 赶紧上车,看代码去: 函数指针是比较容易理解的,但在这里要提两点注意的: 函数指针变量不能进行算术运算,这是与数组指针变量不同的,数组指针变量加减一个整数可以使指针移动,但是这里你要是想让函数指针变量移动的话,估计,,,只能说你很有想法函数调用时“(*指针变量名)”两边的括号一定一定不能少,其中的“ * ”不要理解为指针运算,此时的它只是一种指示符号我强调一下,这个是:![]() 以上就是本次对C/C++中关于int *p[n]、int(p)[n]、intp()和int(*p)()详细介绍,当然,以上的代码都是用C语言敲写,如果看着难受,也可以用C++咯,那就这样,下次见。 |
CopyRight 2018-2019 实验室设备网 版权所有 |